#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10, M = 2 * N;

int h[N], ne[M], w[M], e[M], idx;
int n;
int ans;

void add(int a, int b, int c)  // 添加一条边a->b，边权为c
{
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}

// father表示u的父节点, 因为该图为无向图, 并且迭代过程中不能回到父节点, 所以要特殊标记.
int dfs(int u, int father)
{
    int dist = 0;
    int d1 = 0, d2 = 0;
    
    for (int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if (j == father) continue;
        int d = dfs(j, u) + w[i];//求出路径的长度
        dist = max(dist, d);//求f[x]的最大值
        //d1,d2求出以该点为顶点的最长路径
        if (d >= d1) d2 = d1, d1 = d;//最长路径和次长路径
        else if (d > d2) d2 = d;
    }
    
    ans = max(ans, d1 + d2);
    return dist;
}

int main()
{
    cin >> n;
    memset(h, -1, sizeof h);
    
    for (int i = 1; i < n; i ++ )
    {
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, c);
        add(b, a, c);
    }
    
    dfs(1, -1);
    
    cout << ans << endl;
    
    return 0;
}
